/**
 * 冒泡排序
 */
public class BufferedSort {

    // 对选择排序进行第二波优化，获得稳定性的同时避免额外的for循环
    // public void sort(int[] nums) {
    //     int n = nums.length;
    //     int sortedIndex = 0;
    //     while (sortedIndex < n) {
    //         // 寻找nums[sortedIndex...]中的最小值
    //         // 同时将这个最小值逐步移动到nums[sortedIndex]的位置上
    //         for (int i = n - 1; i > sortedIndex; i--) {
    //             if (nums[i] < nums[sortedIndex]) {
    //                 int temp = nums[i];
    //                 nums[i] = nums[sortedIndex];
    //                 nums[sortedIndex] = temp;
    //             }
    //         }
    //         sortedIndex++;
    //     }
    // }
    // 进一步优化，数组有序时，提前终止循环
    public void sort(int[] nums) {
        int n = nums.length;
        int sortedIndex = 0;
         while (sortedIndex < n) {
             // 加一个boolean变量，记录是否交换过元素
             boolean swapped = false;
             for (int i = n - 1; i > sortedIndex; i--) {
                 if (nums[i] < nums[sortedIndex]) {
                     int temp = nums[i];
                     nums[i] = nums[sortedIndex];
                     nums[sortedIndex] = temp;
                     swapped = true;
                 }
             }

             if (!swapped) {
                 break;
             }
             sortedIndex++;
         }
    }
}
